package com.sojson.util;

import com.sojson.config.exception.TransException;
import com.sojson.util.text.Convert;

/**
 * 正则匹配工具类
 * 
 * @author liu
 * @date 2021-05-04
 */
public class MatcheUtil {

    /** 手机号校验 */
    public static final String REGEX_MOBILE =
        "((\\+86|0086)?\\s*)((134[0-8]\\d{7})|(((13([0-3]|[5-9]))|(14[5-9])|15([0-3]|[5-9])|(16(2|[5-7]))|17([0-3]|[5-8])|18[0-9]|19(1|[8-9]))\\d{8})|(14(0|1|4)0\\d{7})|(1740([0-5]|[6-9]|[10-12])\\d{7}))";
    /** 邮箱校验 */
    public static final String REGEX_MAIL = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
    /** 仅支持字母、数字、下划线、空格、逗号、小数点(支持多个字段排序) */
    public static String SQL_PATTERN = "[a-zA-Z0-9_\\ \\,\\.]+";

    /**
     * 验证是否是手机号
     */
    public static boolean isMobile(String value) {
        return value.matches(REGEX_MOBILE);
    }

    /**
     * 验证是否是邮箱
     */
    public static boolean isMail(String value) {
        return value.matches(REGEX_MAIL);
    }

    /**
     * 验证 order by 语法是否符合规范
     */
    public static boolean isValidOrderBySql(String value) {
        return value.matches(SQL_PATTERN);
    }

    /**
     * 检查字符，防止注入绕过
     */
    public static String escapeOrderBySql(String value) {
        if (StringUtil.isNotEmpty(value)) {
            if (!isValidOrderBySql(value)) {
                ExpUtil.throwEx("排序参数不符合规范,不能进行查询");
            }
            value = Convert.humpLowerCamelToLowerUnderscore(value).toUpperCase();
        }
        return value;
    }

}